package com.sh.business.mapper;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sh.business.domain.User;
import com.sh.business.domain.vo.BackendUserVo;
import com.sh.business.domain.vo.MyTeamVo;
import com.sh.business.domain.vo.UserVo;
import com.sh.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户信息Mapper接口
 *
 * @author ruoyi
 * @date 2024-10-09
 */
public interface UserMapper extends BaseMapperPlus<User, UserVo> {


    List<BackendUserVo> queryBackendUserVo();
    /**
     * 查询当前用户伞下最高级别
     * @param userId
     * @return
     */
    Integer queryUmbrellaUsersMaxLevel(@Param("userId") Long userId);

    /**
     * 根据地址查询
     * @param walletAddress
     * @return
     */
    default User queryByWalletAddress(String walletAddress) {
        return selectOne(Wrappers.<User>lambdaQuery().eq(User::getWalletAddress, walletAddress));
    }

    /**
     * 查询加锁
     * @param userId
     * @return
     */
    default User queryByUserIdLock(Long userId) {
        return selectOne(Wrappers.<User>lambdaQuery().eq(User::getUserId, userId).last(" for update"));
    }

    /**
     * 查询推荐人
     * @param userId
     * @return
     */
    default User queryDirectPush(Long userId) {
        return selectById(selectById(userId).getParentId());
    }

    /**
     * 查询伞下所有用户
     * @param userId
     * @return
     */
    List<User> queryUmbrellaUsers(@Param("userId") Long userId);

    /**
     * 查询平台算力总和
     * @return
     */
    BigDecimal queryGlobalComputility();

    /**
     * 查询平台算力总和 - szpn版本
     * @return
     */
    BigDecimal queryGlobalPurchaseComputility();


    /**
     * 团队统计
     * @return
     */
    MyTeamVo queryMyTeamTotal(@Param("userId") Long userId);

    /**
     * 查询今日新增-团队人数
     * @param userId
     * @return
     */
    Long queryTodayMyTeam(@Param("userId") Long userId);

    /**
     * 团队人数
     * @param userId
     * @return
     */
    Long queryMyTeam(@Param("userId") Long userId);

    /**
     * 今日新增会员
     */
    Long queryTodayUserAmount();

    /**
     * 平台总会员
     */
    Long queryTotalUserAmount();

    /**
     * 全网总算力
     */
    BigDecimal queryTotalComputility();

    /**
     * 查询老用户人数
     * @return
     */
    Long queryOldUserNum();

    /**
     * 查询网体关系 - 只显示4层，上级、自身、所以往下查两级就行了
     * @param user
     * @return
     */
    List<User> queryNetBody(@Param("userId") Long user);

    List<Long> queryVCount(Long userId);

    /**
     * 查询剩余aleo
     */
    BigDecimal queryRemainingAleoAmount();

    /**
     * 查询剩余scr
     */
    BigDecimal queryRemainingScrAmount();

    /**
     * 查询剩余usdt
     */
    BigDecimal queryRemainingUsdtAmount();
}
